package cn.tedu.oop;
/*本类用于测试代码块的基本知识*/
public class TestBlock {
    public static void main(String[] args) {
        //5.创建Teacher类对象并进行测试
        Teacher teacher=new Teacher();
        Teacher teacher1=new Teacher("数学");

        /*每一次创建对象时都会触发构造函数*/

        System.out.println("teacher.subject = " + teacher.getSubject());
        System.out.println("teacher1.subject = " + teacher1.getSubject());

        teacher.teach();
        teacher1.teach();

    }
}

//1.抽象封装形成一个老师类，描述老师这一类型
class Teacher{
    //2.定义属性
    private String subject;//科目
    /*6.创建构造代码块
    * 位置：类里方法外，与成员变量相同
    * 执行时机：在构造方法执行之前执行
    * 作用：用来提取所有构造方法的共性内容
    * *//**构造代码块*/
    {
        subject="JAVA大数据";
        System.out.print("为了提取构造方法的共性功能  ");
        System.out.print("在构造方法执行之前执行   ");
        System.out.println(" 哈哈哈哈，我是一个构造代码块= ");
    }


    //4.1创建Teacher类的无参构造
    public Teacher(){
        System.out.println("我是Teacher类的无参构造~subject = "+subject);
    }
    //4.2创建Teacher类的含参构造
    public Teacher(String subject){
        this.subject=subject;
        System.out.println("我是Teacher类的含参构造~subject = " + subject);
    }

    //3.定义方法

    public void teach(){
        System.out.println("正在上课中~");
        /*7.创建局部代码块
        * 位置：方法里，与局部变量相同
        * 执行时机：调用本方法时，此局部代码块才会被执行
        * 作用：控制变量的作用范围，范围越小越好
        * */
//        int i=9;
        {
            int i=10;
            System.out.println("i = " + i);
        }/*此处不能在局部方法块前声明另外一个int i，会报错，且不能在代码块后紧跟使用i，会报错*/
//        System.out.println("i = " + i);不可以被引用的变量i
        /*Cannot resolve symbol 'i'*/
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }
}